iT邦幫忙

2025 iThome 鐵人賽

DAY 8
0
生成式 AI

打造自己的 AI 新聞小編:每天自動抓新聞、摘要、推送到 LINE!系列 第 8

【Day 8】系統收尾前的最後檢查:搞定 AI 摘要的格式問題!

  • 分享至 

  • xImage
  •  

一路走來,我們目前在 n8n 用了六個節點一層層堆積,依序建立一個有著以下功能的流程:

  1. 抓取 RSS 新聞
  2. 從二十則新聞取第一則
  3. 可以抓新聞 HTML
  4. 取得 HTML 正文
  5. 傳送給 AI 摘要
  6. 推送給 LINE

此時我們已經離小成果剩最後一哩路了,不知道你有沒有發現,昨天我們在執行完最後一個節點後(AI 摘要),顯示的摘要末端有一個換行號(\n),如果沒有注意到的話,現在可以再執行一次你的流程,或是點進上一篇看看我最後貼的圖片。

https://ithelp.ithome.com.tw/upload/images/20250815/20178067CIHZhSX5k1.png

這是 Gemini 或是其他生成式 AI 工具的輸出習慣,而會有這個習慣的原因有以下兩點:

  1. 訓練資料習慣
    AI 模型在接受訓練的時候會讀各式各樣的資料,在這些資料中,一個完整的段落或句子結束後,經常會接著一個換行符。AI 在訓練過程中會學習這些文字的結構和習慣。
  2. 語義上的完整性
    對 AI 來說,\n 不僅僅是換行,它是一個強烈的 「區塊結束」信號,比單純停在句號更能明確表示一個完整的回應已經結束。AI 把換行符號當成是「一段話講完了」的訊號,讓它產出的內容看起來更像一篇完整的文章,符合它在訓練時學到的寫作習慣。

而這種習慣在我們接下來要做的事情上有些不利,在等等操作的時候會再解釋。
事不宜遲,我們先來新增節點吧!

Code 節點清理文字格式

在第二個 HTTP Request 節點後面新增 Code 節點。

https://ithelp.ithome.com.tw/upload/images/20250815/20178067BvgaLXNXGL.png

新增這個節點的目的很簡單,就是要把 AI 摘要完的內容進行「刪除換行符號」的清理動作。

步驟一:選填設定

  1. Mode: 選擇 Run Once for All Items
  2. Language: 選擇 JavaScript
  3. JavaScript 輸入以下程式碼:
// 取得 Gemini API 的回傳結果
const geminiResponse = $input.first().json;
// 提取出摘要文字
const abstractText = geminiResponse.candidates[0].content.parts[0].text;
// 移除文字末尾的換行符號
const cleanedText = abstractText.trim();
// 將處理後的文字回傳
return [{
		json: {
			abstract: cleanedText
		}
}];

你可能會想說:「為什麼要這麼大費周章?新增一個節點就為了移除一個換行符號。」
原因在這:我自己在測試的時候就因為那一個 \n,導致訊息無法傳送到 LINE。

https://ithelp.ithome.com.tw/upload/images/20250815/20178067Jq7nT0OjBu.png

那到底單單一個換行符號是怎麼造成錯誤的呢?
我們看到右邊的 OUTPUT,上面的紅色錯誤訊息:JSON parameter needs to be valid JSON
這行錯誤訊息明顯告訴我們:「n8n 在處理資料時,收到了一段不符合 JSON 格式的字串。」
它在試圖傳送 AI 的摘要文字時,因為最後多了一個不必要的換行符號,導致整段內容在解析時被判定為「不是合法 JSON」。
換句話說,哪怕只是一個不起眼、甚至看不見的 \n,也可能破壞整個資料格式,導致後續作業出錯。

如果你全部的流程都有跟上,且順利看到 AI 摘要的結果、讓換行號消失,
重要時刻來了:把所有節點串接起來!

更改傳送到 LINE 的訊息內容

既然現在已經搞定摘要的部分,我們回到用來傳送訊息到 LINE 的節點(最後一個節點),把要傳送的訊息欄位都放上去,你就會得到一個:一旦啟動,就能給你新聞摘要和連結的 AI 新聞小編。

步驟一:JSON 輸入以下程式碼

{
	"messages": [
		{
			"type": "text",
			"text": "📰 今日新聞摘要:\n{{ $json.abstract }}\n{{ $('RSS Read').item.json.link }}"
		}
	]
}

💡左側上方可選擇前面的所有節點,底下會顯示個別的輸出結果

https://ithelp.ithome.com.tw/upload/images/20250815/201780676MAewtk6Ah.png

  1. {{ $json.abstract }} : 將上一個節點輸出結果 abstract 拖曳到程式碼中

https://ithelp.ithome.com.tw/upload/images/20250815/201780674l1DLD3AG6.png

  1. {{ $('RSS Read').item.json.link }} : 將 RSS Read 節點輸出結果 link 拖曳到程式碼中

https://ithelp.ithome.com.tw/upload/images/20250815/20178067ryZSxYfGNW.png

完成後按下執行,右側沒有輸出結果是正常的,你要去看你的 LINE Bot 是否有傳送程式碼寫的訊息。

你的 LINE Bot 有順利將訊息傳送給你嗎?
如果有,那你這段時間的努力很值得,可以先休息一下;
如果沒有,也不要太氣餒,你一定可以找到是哪裡出了問題,往上仔細看看,是不是程式碼沒打好?或是 LINE 傳送訊息的 URL 打錯了?多檢查一下,你一定可以順利收到它的訊息!

下篇預告

明天 (Day 9)我將會讓這個剛順利完成任務的 AI News Bot 在特定時間傳送訊息給你,真正做到自動化流程這個目標。


上一篇
【Day 7】用 n8n + 程式碼玩轉新聞網頁,讓 HTML 變乾淨文字超簡單!
下一篇
【Day 9】實現「自動化」!一起床就收到新聞,系統收尾囉~
系列文
打造自己的 AI 新聞小編:每天自動抓新聞、摘要、推送到 LINE!15
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言